package com.wtsw.pulsosocial.model.structure;

import android.annotation.SuppressLint;
import android.text.Editable;

import com.facebook.model.GraphPlace;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.wtsw.pulsosocial.controller.GestorCategorias;
import com.wtsw.pulsosocial.controller.GestorEventos;
import com.wtsw.pulsosocial.controller.GestorUbicacion;
import com.wtsw.pulsosocial.model.security.Usuario;
import com.wtsw.pulsosocial.model.util.Tiempo;
import com.wtsw.pulsosocial.model.util.Tiempo.Estado_Tiempo_Evento;

public class Evento {
	private Integer id;
	private String nombre;
	private LatLng ubicacion;
	private GraphPlace lugar;
	private Categoria subcategoria;
	private Marker marker;	
	private Usuario usuario;
	private Tiempo tiempo;

	/**
	 * @param id
	 * @param nombre
	 * @param cat_id
	 * @param ubicacion
	 * @param usuario
	 * 
	 * Constructor cuando creas los objetos desde el webservice
	 * @param tiempo2 
	 */
	public Evento(Integer id, String nombre, Integer cat_id,LatLng ubicacion, Usuario usuario, Tiempo tiempo) {
		this.id = id;
		this.nombre = nombre;
		this.subcategoria = GestorCategorias.findSubCategory(cat_id);
		this.ubicacion = ubicacion;
		this.usuario = usuario;
		this.tiempo = tiempo;
		GestorEventos.addEvent(this);
	}
	
	/**
	 * @param location
	 * @param usuario
	 * 
	 * constructor local
	 */
	public Evento(LatLng location, Usuario usuario) {
		// TODO Auto-generated constructor stub
		this.ubicacion = location;
		this.usuario = usuario;
	}

	public LatLng getUbicacion() {
		return ubicacion;
	}

	public void setUbicacion(LatLng ubicacion) {
		this.ubicacion = ubicacion;
	}

	public void setLugar(GraphPlace selection) {
		// TODO Auto-generated method stub
		this.lugar = selection;
	}
	
	public GraphPlace getLugar() {
		return lugar;
	}

	public Integer getId() {
		// TODO Auto-generated method stub
		return id;
	}

	public void setSubCategoria(Categoria subcategoria) {
		// TODO Auto-generated method stub
		this.subcategoria = subcategoria;
	}
	
	public Categoria getSubCategoria() {
		// TODO Auto-generated method stub
		return subcategoria;
	}
	
	@Override
	 public String toString() {
	  return nombre;
	 }
	
	public String getNombre() {
		return nombre;
	}

	public void setMarker(Marker marker) {
		// TODO Auto-generated method stub
		this.marker = marker;
	}
	
	public Marker getMarker() {
		return marker;
	}

	public void setNombre(Editable text) {
		// TODO Auto-generated method stub
		this.nombre = text.toString();
	}
	
	public void setId(Integer id) {
		this.id =id;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	@SuppressLint("UseValueOf")
	public String getDistancia() {
		// TODO Auto-generated method stub
		double lat1 = this.ubicacion.latitude;
		double lng1 = this.ubicacion.longitude;
		
	    double lat2 = GestorUbicacion.getLocation().latitude;
	    double lng2 = GestorUbicacion.getLocation().longitude;
		
	    double earthRadius = 3958.75;
	    double dLat = Math.toRadians(lat2-lat1);
	    double dLng = Math.toRadians(lng2-lng1);
	    double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
	               Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
	               Math.sin(dLng/2) * Math.sin(dLng/2);
	    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
	    double dist = earthRadius * c;

	    int meterConversion = 1609;

	    return String.valueOf(new Float(dist * meterConversion).intValue())+"m.";	
	}

	public Tiempo getTiempo() {
		return tiempo;
	}

	public void setTiempo(Tiempo tiempo) {
		this.tiempo = tiempo;
	}
	
	public float getStateColor() {
		if (tiempo.event_state()==Estado_Tiempo_Evento.ACABO) {
			return BitmapDescriptorFactory.HUE_RED;
		}
		if (tiempo.event_state()==Estado_Tiempo_Evento.DESARROLLO) {
			return BitmapDescriptorFactory.HUE_GREEN;
		}
		if (tiempo.event_state()==Estado_Tiempo_Evento.NO_INICIADO) {
			return BitmapDescriptorFactory.HUE_CYAN;
		}
		return 0;
	}
}
